
package se.sll.service.catalogue.offers.api.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Generated;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import org.codehaus.jackson.annotate.JsonAnyGetter;
import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jackson.map.annotate.JsonSerialize;


/**
 * A model object for the creation of an Offer
 * 
 */
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
    "hsaID",
    "regionalUnitId",
    "sourceSystemHsaId",
    "organisation",
    "properties"
})
public class CreateOffer {

    /**
     * 
     * (Required)
     * 
     */
    @JsonProperty("hsaID")
    @NotNull
    private String hsaID;
    /**
     * 
     * (Required)
     * 
     */
    @JsonProperty("regionalUnitId")
    @NotNull
    private String regionalUnitId;
    /**
     * 
     */
    @JsonProperty("sourceSystemHsaId")
    private String sourceSystemHsaId;
    /**
     * A model object for the creation of an Offer
     * 
     */
    @JsonProperty("organisation")
    @Valid
    private Organisation organisation;
    /**
     * a collection of generic CV Types
     * 
     */
    @JsonProperty("properties")
    @Valid
    private List<Type> properties = new ArrayList<Type>();
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    /**
     * 
     * (Required)
     * 
     * @return
     *     The hsaID
     */
    @JsonProperty("hsaID")
    public String getHsaID() {
        return hsaID;
    }

    /**
     * 
     * (Required)
     * 
     * @param hsaID
     *     The hsaID
     */
    @JsonProperty("hsaID")
    public void setHsaID(String hsaID) {
        this.hsaID = hsaID;
    }

    public CreateOffer withHsaID(String hsaID) {
        this.hsaID = hsaID;
        return this;
    }

    /**
     * 
     * (Required)
     * 
     * @return
     *     The regionalUnitId
     */
    @JsonProperty("regionalUnitId")
    public String getRegionalUnitId() {
        return regionalUnitId;
    }

    /**
     * 
     * (Required)
     * 
     * @param regionalUnitId
     *     The regionalUnitId
     */
    @JsonProperty("regionalUnitId")
    public void setRegionalUnitId(String regionalUnitId) {
        this.regionalUnitId = regionalUnitId;
    }

    public CreateOffer withRegionalUnitId(String regionalUnitId) {
        this.regionalUnitId = regionalUnitId;
        return this;
    }

    /**
     * 
     * @return
     *     The sourceSystemHsaId
     */
    @JsonProperty("sourceSystemHsaId")
    public String getSourceSystemHsaId() {
        return sourceSystemHsaId;
    }

    /**
     * 
     * @param sourceSystemHsaId
     *     The sourceSystemHsaId
     */
    @JsonProperty("sourceSystemHsaId")
    public void setSourceSystemHsaId(String sourceSystemHsaId) {
        this.sourceSystemHsaId = sourceSystemHsaId;
    }

    public CreateOffer withSourceSystemHsaId(String sourceSystemHsaId) {
        this.sourceSystemHsaId = sourceSystemHsaId;
        return this;
    }

    /**
     * A model object for the creation of an Offer
     * 
     * @return
     *     The organisation
     */
    @JsonProperty("organisation")
    public Organisation getOrganisation() {
        return organisation;
    }

    /**
     * A model object for the creation of an Offer
     * 
     * @param organisation
     *     The organisation
     */
    @JsonProperty("organisation")
    public void setOrganisation(Organisation organisation) {
        this.organisation = organisation;
    }

    public CreateOffer withOrganisation(Organisation organisation) {
        this.organisation = organisation;
        return this;
    }

    /**
     * a collection of generic CV Types
     * 
     * @return
     *     The properties
     */
    @JsonProperty("properties")
    public List<Type> getProperties() {
        return properties;
    }

    /**
     * a collection of generic CV Types
     * 
     * @param properties
     *     The properties
     */
    @JsonProperty("properties")
    public void setProperties(List<Type> properties) {
        this.properties = properties;
    }

    public CreateOffer withProperties(List<Type> properties) {
        this.properties = properties;
        return this;
    }

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

    public CreateOffer withAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
        return this;
    }

}
